import Vue from 'vue'
import Router from 'vue-router';

Vue.use(Router);

let routerList = [] // 路由数组 - 存放所有路由


/*
    require.context(directory,includeSubdirs, filter,mode)
        directory - 读取文件的路径
        includeSubdirs - 是否遍历文件的子目录
        filter - 匹配文件的正则
        mode - 加载模式 optional, 'sync' | 'eager' | 'weak' | 'lazy' | 'lazy-once', default 'sync'
    值得注意的是require.context函数执行后返回的是一个函数,并且这个函数有3个属性

    resolve {Function} -接受一个参数request,

    keys {Function} -返回匹配成功模块的名字组成的数组

    id {String} -执行环境的id,返回的是一个字符串,主要用在module.hot.accept,应该是热加载?

    这三个都是作为函数的属性(注意是作为函数的属性,函数也是对象,有对应的属性)

*/

// const requireComponent = require.context('.', true, /\.route\.js$/); //读取路由文件

// function importAll(routerArr) {
//     //console.log(routerArr.keys())
//     routerArr.keys().map(item => {
//         //console.log(routerArr(item).default)
//         routerList = routerList.concat(...(routerArr(item).default)) //此处可根据路由文件自行修改，拼接成正常路由格式即可
//     })
// };

// importAll(requireComponent);

const requireComponent = require.context('@/pages', true, /index.vue/); //读取路由文件
// console.log(requireComponent.keys())
requireComponent.keys().forEach((fileName) => {
    const completeName = fileName.replace(/\.\//, '');
    const config = requireComponent(fileName) //config.default.name为组件内的名字，需唯一
    if (completeName.split('/')[0] && completeName.split('/')[0] != 'home') { //除去home的页面，因为home属于首页，不放进frameIn里面
        const nameSplit = config.default.name || completeName.split('/')[0];
        routerList.push({
            path: `/${nameSplit}`,
            name: `${nameSplit}`,
            component: resolve => require([`@/pages/${completeName}`], resolve)
        });
    }

    //console.log(`@/pages/${completeName}`)
});
// console.log(routerList)
// requireComponent1.keys().forEach((fileName) => {
//     const completeName = fileName.match(/\w+\.vue$/, '')[0];
//     console.log(completeName)
//     if (completeName.match(/\d\.vue$/g)) {
//         const routerObj = {};
//         let permissionNum = 0;
//         routerObj.path = fileName.replace(/\./, 'autoRouter').replace(/\d\.vue$/, '/:id')
//         routerObj.name = completeName.replace(/\d\.vue$/, '');
//         // console.error('allVueComponentItem.replace(/\\.\\//, \'../components/点点滴滴/\')', allVueComponentItem.replace(/\.\//, '../components/autoRouter/').replace(/\.vue$/, ''))
//         // const componentName = allVueComponentItem.replace(/\.\//, '../components/autoRouter/').replace(/\.vue$/, '');
//         // console.error('componentName', componentName)
//         // routerObj.allVueComponentItem = allVueComponentItem
//         // console.error('completeName', completeName)
//         // 一、懒加载的实现
//         // routerObj.component = () => requireAllVueComponents(allVueComponentItem)
//         routerObj.component = () => requireComponent1(fileName).default || requireComponent1(fileName)


//         // 二、非懒加载--同步的实现
//         // routerObj.component = requireAllVueComponents(allVueComponentItem).default || requireAllVueComponents(allVueComponentItem)

//         routerList.push(routerObj)
//     }
// });
import BasicLayout from '@/layout';
let frameIn = [{
    path: '/',
    redirect: {
        name: 'home'
    },
    component: BasicLayout,
    children: [...routerList]
}];
let frameOut = [{
    path: '/',
    name: 'home',
    component: resolve => require(['@/pages/home/index.vue'], resolve)
}];


const routes = [,
    ...frameOut,
    ...frameIn,
    {
        path: '*',
        redirect: {
            name: 'error404'
        }
    }
]
console.log(routes)

let router = new Router({
    routes
});
export default router;